//package com.ruoyi.lock.controller;
//
//import com.ruoyi.common.annotation.Anonymous;
//import com.ruoyi.common.core.controller.BaseController;
//import com.ruoyi.common.core.domain.AjaxResult;
//import com.ruoyi.tengxun.domain.SmsMessage;
//import com.ruoyi.tengxun.service.impl.ISmsService;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.bind.annotation.GetMapping;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestParam;
//import org.springframework.web.bind.annotation.RestController;
//
//import java.util.HashMap;
//import java.util.Map;
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;
//
///**
// * 短信测试控制器
// * 使用真实短信服务
// */
//@RestController
//@Anonymous
//@RequestMapping("/lock/sms/test")
//public class SmsTestController extends BaseController {
//    private static final Logger log = LoggerFactory.getLogger(SmsTestController.class);
//
//    // 错误码与中文解释的映射
//    private static final Map<String, String> ERROR_CODE_MAP = new HashMap<>();
//
//    static {
//        // 初始化腾讯云SMS错误码映射表
//        ERROR_CODE_MAP.put("FailedOperation.InsufficientBalanceInSmsPackage", "账户余额不足，请充值");
//        ERROR_CODE_MAP.put("FailedOperation.ContainSensitiveWord", "短信内容包含敏感词");
//        ERROR_CODE_MAP.put("FailedOperation.FailResolvePacket", "请求包解析失败，通常情况下是由于没有遵守API接口说明规范导致的");
//        ERROR_CODE_MAP.put("FailedOperation.ForbidAddMarketingTemplates", "禁止添加营销短信模板");
//        ERROR_CODE_MAP.put("FailedOperation.JsonParseFail", "解析请求包体时候失败");
//        ERROR_CODE_MAP.put("FailedOperation.MarketingSendTimeConstraint", "营销短信发送时间限制");
//        ERROR_CODE_MAP.put("FailedOperation.MissingTemplateToModify", "此模板ID不存在");
//        ERROR_CODE_MAP.put("FailedOperation.NotEnterpriseCertification", "非企业认证无法使用签名");
//        ERROR_CODE_MAP.put("FailedOperation.OtherError", "其他错误");
//        ERROR_CODE_MAP.put("FailedOperation.ParametersOtherError", "参数配置错误");
//        ERROR_CODE_MAP.put("FailedOperation.PhoneNumberInBlacklist", "手机号在黑名单中");
//        ERROR_CODE_MAP.put("FailedOperation.SignatureIncorrectOrUnapproved", "签名未审批或格式错误");
//        ERROR_CODE_MAP.put("FailedOperation.TemplateAlreadyExists", "模板已存在");
//        ERROR_CODE_MAP.put("FailedOperation.TemplateIncorrectOrUnapproved", "模板未审批或内容格式错误");
//        ERROR_CODE_MAP.put("FailedOperation.SmsDeliveryFailed", "短信发送失败");
//        ERROR_CODE_MAP.put("UnauthorizedOperation.RequestPermissionDeny", "请求未授权，请检查账号权限");
//        ERROR_CODE_MAP.put("UnauthorizedOperation.SmsSdkAppIdVerifyFail", "SdkAppId校验失败");
//        ERROR_CODE_MAP.put("UnsupportedOperation.", "不支持的操作");
//        ERROR_CODE_MAP.put("InvalidParameterValue.IncorrectPhoneNumber", "手机号格式错误");
//        ERROR_CODE_MAP.put("InvalidParameterValue.SdkAppIdNotExist", "SdkAppId不存在");
//        ERROR_CODE_MAP.put("LimitExceeded.PhoneNumberCountLimit", "调用频率超过限额");
//        ERROR_CODE_MAP.put("LimitExceeded.PhoneNumberDailyLimit", "短信日下发条数超过设定的上限");
//        ERROR_CODE_MAP.put("LimitExceeded.PhoneNumberThirtySecondLimit", "短信30秒内下发条数超过设定的上限");
//        ERROR_CODE_MAP.put("LimitExceeded.PhoneNumberOneHourLimit", "短信1小时内下发条数超过设定的上限");
//    }
//
//    @Autowired
//    private ISmsService smsService; // 直接注入默认的短信服务实现
//
//    /**
//     * 解析错误消息中的错误码
//     */
//    private String parseErrorCode(String errorMsg) {
//        if (errorMsg == null || errorMsg.isEmpty()) {
//            return "未知错误";
//        }
//
//        // 尝试解析JSON中的错误码
//        Pattern pattern = Pattern.compile("\"Code\":\"([^\"]+)\"");
//        Matcher matcher = pattern.matcher(errorMsg);
//        if (matcher.find()) {
//            String errorCode = matcher.group(1);
//            return ERROR_CODE_MAP.getOrDefault(errorCode, errorCode) + " (" + errorCode + ")";
//        }
//
//        return errorMsg;
//    }
//
//    /**
//     * 测试直接发送短信
//     */
//    @GetMapping("/direct")
//    public AjaxResult sendDirectSms(@RequestParam(defaultValue = "18501931541") String phoneNumber) {
//        try {
//            log.info("开始直接发送短信测试，手机号: {}", phoneNumber);
//
//            // 创建短信消息对象
//            SmsMessage message = new SmsMessage()
//                    .setPhoneNumber(phoneNumber)
//                    .setSmsType(SmsMessage.SmsType.VERIFICATION_CODE);
//
//            Map<String, String> params = new HashMap<>();
//            params.put("1", "123456"); // 验证码参数
//            message.setParams(params);
//
//            boolean result = smsService.sendSms(message);
//            log.info("直接发送短信结果: {}", result ? "成功" : "失败");
//
//            return result ? success("短信发送成功") : error("短信发送失败");
//        } catch (Exception e) {
//            String errorMsg = e.getMessage();
//            log.error("直接发送短信出现异常: {}", errorMsg, e);
//
//            // 解析错误码并翻译为中文
//            String translatedError = parseErrorCode(errorMsg);
//            return error("发送短信失败: " + translatedError);
//        }
//    }
//
//    /**
//     * 测试发送验证码
//     */
//    @GetMapping("/code")
//    public AjaxResult sendVerificationCode(@RequestParam(defaultValue = "18501931541") String phoneNumber,
//                                          @RequestParam(defaultValue = "123456") String code) {
//        try {
//            log.info("开始发送验证码测试，手机号: {}, 验证码: {}", phoneNumber, code);
//            boolean result = smsService.sendVerificationCode(phoneNumber, code);
//            log.info("发送验证码结果: {}", result ? "成功" : "失败");
//            return result ? success("验证码发送成功") : error("验证码发送失败");
//        } catch (Exception e) {
//            String errorMsg = e.getMessage();
//            log.error("发送验证码出现异常: {}", errorMsg, e);
//
//            // 解析错误码并翻译为中文
//            String translatedError = parseErrorCode(errorMsg);
//            return error("发送验证码失败: " + translatedError);
//        }
//    }
//
//    /**
//     * 测试发送密码开通通知
//     */
//    @GetMapping("/password-open")
//    public AjaxResult sendPasswordOpenNotification(@RequestParam(defaultValue = "18501931541") String phoneNumber) {
//        try {
//            log.info("开始发送密码开通通知测试，手机号: {}", phoneNumber);
//            boolean result = smsService.sendPasswordOpenNotification(phoneNumber);
//            log.info("发送密码开通通知结果: {}", result ? "成功" : "失败");
//            return result ? success("密码开通通知发送成功") : error("密码开通通知发送失败");
//        } catch (Exception e) {
//            String errorMsg = e.getMessage();
//            log.error("发送密码开通通知出现异常: {}", errorMsg, e);
//
//            // 解析错误码并翻译为中文
//            String translatedError = parseErrorCode(errorMsg);
//            return error("发送密码开通通知失败: " + translatedError);
//        }
//    }
//
//    /**
//     * 测试发送密码修改通知
//     */
//    @GetMapping("/password-modify")
//    public AjaxResult sendPasswordModifyNotification(@RequestParam(defaultValue = "18501931541") String phoneNumber) {
//        try {
//            log.info("开始发送密码修改通知测试，手机号: {}", phoneNumber);
//            boolean result = smsService.sendPasswordModifyNotification(phoneNumber);
//            log.info("发送密码修改通知结果: {}", result ? "成功" : "失败");
//            return result ? success("密码修改通知发送成功") : error("密码修改通知发送失败");
//        } catch (Exception e) {
//            String errorMsg = e.getMessage();
//            log.error("发送密码修改通知出现异常: {}", errorMsg, e);
//
//            // 解析错误码并翻译为中文
//            String translatedError = parseErrorCode(errorMsg);
//            return error("发送密码修改通知失败: " + translatedError);
//        }
//    }
//
//    /**
//     * 测试发送续期通知
//     */
//    @GetMapping("/renewal")
//    public AjaxResult sendRenewalNotification(@RequestParam(defaultValue = "18501931541") String phoneNumber) {
//        try {
//            log.info("开始发送续期通知测试，手机号: {}", phoneNumber);
//            boolean result = smsService.sendRenewalNotification(phoneNumber);
//            log.info("发送续期通知结果: {}", result ? "成功" : "失败");
//            return result ? success("续期通知发送成功") : error("续期通知发送失败");
//        } catch (Exception e) {
//            String errorMsg = e.getMessage();
//            log.error("发送续期通知出现异常: {}", errorMsg, e);
//
//            // 解析错误码并翻译为中文
//            String translatedError = parseErrorCode(errorMsg);
//            return error("发送续期通知失败: " + translatedError);
//        }
//    }
//}